7.1 Date-Related and Time-Related Features(時間日期相關特徵)
7.2 Feature Engineering for Time Series(時間序列)
以墨爾本每日最低溫資料為例:
data = pd.read_csv('../input/others/daily-min-temperatures.csv', header=0, parse_dates=True, squeeze=True)
# 轉換成日期格式
data['Date'] = pd.to_datetime(data['Date'],format='%Y-%m-%d')
提取前過去資料統計數值特徵:
我們可以使用Pandas的視窗計算(window calculations)功能。Pandas提供兩種視窗計算功能:滾動視窗(rolling window)和擴張視窗(expanding window)兩種計算功能。
視窗是指進行視窗運算的資料列的子集合,當我們定義一個視窗後,就可以對視窗內資料進行各種統計運算。
滾動視窗rolling window計算
Uber網站下載的圖 清楚的傳達這個觀念。
Sliding window
如下圖,我們定義視窗大小是2,並計算視窗內資料的平均值後,視窗往下移動一列,然後再計算視窗內資料的平均值。
使用Pandas的rolling()函數計算移動平均
# 視窗大小是7
data['rolling_mean'] = data['Temp'].rolling(window=7).mean()
data = data[['Date', 'Temp', 'rolling_mean']]
data.head(10)
/|Date| Temp| rolling_mean
------------- | -------------
0| 1981-01-01| 20.7| NaN
1| 1981-01-02| 17.9| NaN
2| 1981-01-03| 18.8| NaN
3| 1981-01-04| 14.6| NaN
4| 1981-01-05| 15.8| NaN
5| 1981-01-06| 15.8| NaN
6| 1981-01-07| 15.8| 17.057143
7| 1981-01-08| 17.4| 16.585714
8| 1981-01-09| 21.8| 17.142857
9| 1981-01-10| 20.0| 17.314286
每一列的移動平均"rolling_mean"等於它的當天溫度"Temp"加上前6列的"Temp",再除以7(視窗大小);也就是它的移動平均(Moving Avg) = ([t] + [t-1] +...+ [t-6]) / 7。
擴張視窗expanding window計算
在滾動視窗下,視窗的大小是固定的,視窗隨時間向前移動,所以我們只有考慮到最近的資料,而忽略了過去的資料,而擴張視窗會把過去所有的資料都考慮進來,累加進來。
Expanding window
圖片來源:Uber.com
當我建立視窗並進行視窗內資料運算後,視窗往前加入下一列資料,也就是視窗向前擴大一列後,再進行視窗內的資料運算。
使用Pandas的expanding()函數計算平均值
data['expanding_mean'] = data['Temp'].expanding(7).mean()
data = data[['Date', 'Temp', 'expanding_mean']]
data.head(10)
/|Date| Temp |expanding_mean
------------- | -------------
0| 1981-01-01| 20.7| NaN
1| 1981-01-02| 17.9| NaN
2| 1981-01-03| 18.8| NaN
3| 1981-01-04| 14.6| NaN
4| 1981-01-05| 15.8| NaN
5| 1981-01-06| 15.8| NaN
6| 1981-01-07| 15.8| 17.057143
7| 1981-01-08| 17.4| 17.100000
8| 1981-01-09| 21.8| 17.622222
9| 1981-01-10| 20.0| 17.860000